package com.cancer.common.util;

import java.io.BufferedInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;

public final class PropertyUtil {
	/**
	 * 根据classpath读取配置文件
	 * 
	 * @author 刘俊 2015年1月30日
	 * @param path
	 * @return
	 */
	public static Properties readProperiesByClasspath(String path) {
		Properties prop =  new Properties();
		
		InputStream  fis = null;		
		BufferedInputStream bis = null;
		try {
			fis = PropertyUtil.class.getClassLoader().getResourceAsStream(path); 
			bis = new BufferedInputStream(fis);
			prop.load(bis);
		} catch (FileNotFoundException fnfe) {
			throw new RuntimeException("cound not find file: " + path );
		} catch (IOException e) {
			throw new RuntimeException(e);
		} finally {
			if (bis != null) {try {bis.close();} catch (Exception e) {throw new RuntimeException(e.getMessage() );}}
			if (fis != null) {try {fis.close();} catch (Exception e) {throw new RuntimeException(e.getMessage() );}}
		}
		
		return prop;
	}
	
	/**
	 * 通过key获取properties的值
	 * 
	 * @author 刘俊 2015年1月30日
	 * @param prop
	 * @param key
	 * @return
	 */
	public static String getValue(Properties prop, String key) {
		if (prop == null) {
			return null;
		} else {
			return prop.getProperty(key);
		}
	}
	
	/**
	 * 通过key获取properties的值
	 * 
	 * @author 刘俊 2015年1月30日
	 * @param prop
	 * @param key
	 * @return
	 */
	public static String getValue(Properties prop, String key, String defValue) {
		if (prop == null) {
			return null;
		} else {
			return prop.getProperty(key, defValue);
		}
	}
	
	/**
	 * 通过地址key，直接获取到要使用的url
	 * 
	 * @author 刘俊 2015年2月2日
	 * @param prop
	 * @param key
	 * @return
	 */
	public static String getUrl(Properties prop, String key) {
		if (prop == null) {
			return null;
		} else {
			String urlKey = prop.getProperty(key);
			if (urlKey == null || "".equals(urlKey)) {
				return null;
			} else {
				return prop.getProperty(urlKey);
			}
		}
	}
	
	/**
	 * 将properties转成map
	 * 
	 * @author 刘俊 2015年1月30日
	 * @param prop
	 * @return
	 */
	public static Map<String, String> prop2Map(Properties prop) {
		if (prop == null) {
			return null;
		} else {
			Map<String, String> propMap = new HashMap<String, String>();
			 
			Enumeration<?> en = prop.propertyNames();
			while (en.hasMoreElements()) {
				String key = (String) en.nextElement();
				String value = prop.getProperty(key);
				propMap.put(key, value);
			}
			
			return propMap;
		}
	}
	
	/**
	 * 将properties转成map(key全部小写)
	 * 
	 * @author 刘俊 2015年1月30日
	 * @param prop
	 * @return
	 */
	public static Map<String, String> prop2MapLower(Properties prop) {
		if (prop == null) {
			return null;
		} else {
			Map<String, String> propMap = new HashMap<String, String>();
			
			Enumeration<?> en = prop.propertyNames();
			while (en.hasMoreElements()) {
				String key = (String) en.nextElement();
				String value = prop.getProperty(key);
				propMap.put(key.toLowerCase(), value);
			}
			
			return propMap;
		}
	}
}
